package com.itheima.d6_tcp3;

import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;

/**
 *  目标：完成TCP通信快速入门-客户端开发：实现客户端可以反复的发消息出去
 *
 *目前我们开发的服务端程序，是否可以支持与多个客户端同时通信 ？
 * 不可以的。
 * 因为服务端现在只有一个主线程，只能处理一个客户端的消息。
 * TCP通信-支持与多个客户端同时通信
 *
 * 本次是如何实现服务端同时接收多个客户端的消息的？
 * 主线程定义了循环负责接收客户端Socket管道连接
 * 每接收到一个Socket通信管道后分配一个独立的线程负责处理它。
 */
public class Client {
    public static void main(String[] args) throws Exception {
        // 1、创建Socket对象，并同时请求与服务端程序的连接。
        Socket socket = new Socket("127.0.0.1", 8888);
        // 并且和udp协议不一样,这里的端口号是指客户端去服务端的端口号，所以服务端和客户端两者的端口号要相匹配
        //后续服务端开发好了，一但接收客户端我这个地方的连接请求，那就可以得到一个socket对象，相当于得到一个socket通信管道

        // 2、从socket通信管道中得到一个字节输出流，用来发数据给服务端程序。
        OutputStream os = socket.getOutputStream();
        // 3、把低级的字节输出流包装成数据输出流
        DataOutputStream dos = new DataOutputStream(os);

        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请说：");
            String msg = sc.nextLine();

            // 一旦用户输入了exit，就退出客户端程序
            if("exit".equals(msg)){
                System.out.println("欢迎您下次光临！退出成功！");
                dos.close();
                socket.close();
                break;
            }
            // 4、开始写数据出去了
            dos.writeUTF(msg);
            dos.flush();
        }
    }
}
